package com.singlemountaintech.haogongjiang.qfd;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import com.framework.activity.backactivity.BaseBackActivity;
import com.framework.util.StatusBarUtil;
import com.kymjs.frame.view.IDelegate;
import com.singlemountaintech.haogongjiang.R;
import com.singlemountaintech.haogongjiang.event.RxBus;
import com.singlemountaintech.haogongjiang.event.RxBus_LoginSuccess;

import rx.Subscription;
import rx.functions.Action1;

/**
 * Created by LUOLI on 2017/3/13.
 */

public abstract class BaseActivityPresenter<T extends IDelegate> extends BaseBackActivity<T> {
    protected boolean isSetStartBar = true;
    private Subscription subscribe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //  默认设置状态栏为透明，通过给toorBar设置paddingTop值来实现沉浸式状态栏，
        // 如果toorBar的背景值是浅色的（例如白色）  则应先判断当前手机是否是小米或者魅族或者是android6.0以上的手机，
        // 如果是则应该先设置状态栏文字和图标为黑色（亮色模式），再设置状态栏为全透明，以使设置的paddingTop生效，达到沉浸式的效果
        // 如果不是就默认不实现沉浸式状态栏，方法是让状态栏和当前系统的主题颜色一致（即通过设置style文件里面的colorPrimaryDark属性实现），同时取消设置的paddingTop
        // 在需要显示浅色ToorBar的Activity的bindEvenListener方法里面调用下面注释的代码即可实现
//        if (StatusBarUtil.getIsSupportStatusBarLightMode(this)) {
//            // 支持
//            StatusBarUtil.StatusBarLightMode(this);
//        } else {
//            // 不支持 即不设置状态栏为全透明
//            isSetStartBar = false;
//            viewDelegate.getToolbar().setPadding(0, 0, 0, 0);
//        }
        if (isSetStartBar) {
            StatusBarUtil.transparencyBar(this);
        }
        subscribe = RxBus.getDefault().toObservable(RxBus_LoginSuccess.class)
                .subscribe(new Action1<RxBus_LoginSuccess>() {
                    @Override
                    public void call(RxBus_LoginSuccess rxBus_loginSuccess) {
                        refresh();
                    }
                });
    }

    protected void refresh() {
        // TODO: 2018/2/23 重新登录成功后刷新数据的操作在此完成
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(!subscribe.isUnsubscribed()){
            subscribe.unsubscribe();
        }
    }

    public void openActivity(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent(this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    public void openActivity(Class<?> cls) {
        openActivity(cls, null);
    }

    public void openActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent(this, cls);
        if (bundle != null)
            intent.putExtras(bundle);
        startActivityForResult(intent, requestCode);
    }

    public void openActivityForResult(Class<?> cls, int requestCode) {
        openActivityForResult(cls, null, requestCode);
    }
    /**
     * 以下两个方法是为了当点击其他地方的时候隐藏键盘
     *
     * @param ev
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            clickBlank();
            View v = getCurrentFocus();
            if (isShouldHideInput(v, ev)) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    View rootView = viewDelegate.getRootView();
                    rootView.setFocusableInTouchMode(true);
                    rootView.setFocusable(true);
                    rootView.requestFocus();
                }

            }
            return super.dispatchTouchEvent(ev);
        }
        // 必不可少，否则所有的组件都不会有TouchEvent了
        if (getWindow().superDispatchTouchEvent(ev)) {
            return true;
        }
        return onTouchEvent(ev);
    }

    protected void clickBlank() {

    }

    public boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] leftTop = {0, 0};
            //获取输入框当前的location位置
            v.getLocationInWindow(leftTop);
            int left = leftTop[0];
            int top = leftTop[1];
            int bottom = top + v.getHeight();
            int right = left + v.getWidth();
            return !(event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom);
        }
        return false;
    }
}
